package pe.edu.upc.jaxws.dao;

import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport;
import org.springframework.stereotype.Repository;
import pe.edu.upc.jaxws.model.Despacho;

@Repository
public class DespachoDaoJdbc extends SimpleJdbcDaoSupport implements
		DespachoDao {

	@Autowired
	public DespachoDaoJdbc(DataSource dataSource) {
		setDataSource(dataSource);
	}

	public Despacho getDespachoPorCodigo(String Codigo) {
		try {
			return getSimpleJdbcTemplate()
					.queryForObject(
							"SELECT COD_DESPACHO, FECHA_REGISTRO, FECHA_ENTREGA, CANTIDAD, PLACA, ATENDIDO, U.LONGITUD, U.LATITUD FROM DESPACHO D, UBICACION U  WHERE D.PLACA = U.PLACA  AND U.AUTOGENERADO = ( SELECT MAX(UB.AUTOGENERADO) FROM UBICACION UB WHERE UB.PLACA = D.PLACA ) AND COD_DESPACHO=?",
							new BeanPropertyRowMapper<Despacho>(Despacho.class),
							Codigo);
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}

	public List<Despacho> getDespachos() {
		try {
			return getSimpleJdbcTemplate()
					.query("select COD_DESPACHO,FECHA_REGISTRO,FECHA_ENTREGA,CANTIDAD,PLACA ,ATENDIDO from DESPACHO WHERE DESPACHO.ATENDIDO LIKE '0'",
							new BeanPropertyRowMapper<Despacho>(Despacho.class));
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}

	public List<Despacho> getDespachosAtendidos() {
		try {
			return getSimpleJdbcTemplate()
					.query("select COD_DESPACHO,FECHA_REGISTRO,FECHA_ENTREGA,CANTIDAD,PLACA ,ATENDIDO from DESPACHO WHERE DESPACHO.ATENDIDO LIKE '1'",
							new BeanPropertyRowMapper<Despacho>(Despacho.class));
		} catch (EmptyResultDataAccessException e) {
			return null;
		}
	}
	
	public void registrarDespacho(Despacho despacho) {
		System.out.println("DAO JDBC " + despacho.getPlaca());
		String sql = "insert into DESPACHO(COD_DESPACHO,FECHA_REGISTRO,FECHA_ENTREGA,CANTIDAD,PLACA,ATENDIDO) values (?, ?, ?, ?, ?, ?)";
		getJdbcTemplate().update(sql, despacho.getCodigo(),
				despacho.getFechaRegistro(), despacho.getFechaEntrega(),
				despacho.getCantidad(), despacho.getPlaca(),
				despacho.getAtendido());
	}
}
